home *** CD-ROM | disk | FTP | other *** search
/ The PC-SIG Library 10 / The PC-Sig Library - Shareware for the IBM PC and Compatibles (PC-SIG)(Tenth Edition Disks 1-2804)(1991).iso / PC_SIGCD / 20 / 5 / DISK2058.ZIP / UNFAST.EXE / EXTINPUT.FI < prev    next >
Text File  |  1980-01-01  |  3KB  |  136 lines

  1. ;=============================================================================
  2. ;          TEST.MSG - extended input program.
  3. ;=============================================================================
  4. ;
  5. ;length=EXT_INPUT(string)
  6. ;length=EXT_CLEAN_INPUT(string)
  7. ;length=EXT_STRING(space,len)
  8. ;length=EXT_CLEAN_STRING(space,len)
  9. ;
  10. ;NB. length=0 when esc is pushed.
  11. ;
  12.  
  13. ;LOCPOS = input position.
  14. #short
  15. var eim,ext_max
  16. store_eim ? 128
  17. ext_inpend=13
  18.  
  19. proc ext_clear_line fillb ext_max from eim with ' ':ext_tx=0
  20.  
  21. function last_place
  22.     {
  23.     ex=0:m=eim
  24.     while m below (eim+ext_max-2)
  25.     {
  26.     if peekb m<>' ' then ex=m-eim+1
  27.     m++
  28.     }
  29.     return ex
  30.     }
  31.  
  32. function ext_input(eim)
  33. {
  34. ext_max=peekb eim
  35. eim+=2
  36. eis=1
  37.  
  38. ext_entry2:
  39. ext_esc=0
  40. moveb ext_max from eim to store_eim
  41.  
  42. filling=0:ein=eim
  43. repeat ext_max
  44.     {
  45.     if (peekb ein=13) or (peekb ein=0) or (peekb ein=ext_inpend) then filling=1
  46.     if filling then pokeb ein,' '
  47.     ein++
  48.     }
  49.  
  50. ext_tx=0:ext_insert=0
  51. ext_yy=locpos/160
  52. ext_xx=(locpos mod 160)/2
  53. loop:
  54. locate ext_yy,ext_xx
  55. m=eim:repeat ext_max print chr peek m;:m++
  56.  
  57. cursor ext_yy,(ext_tx+ext_xx)
  58. if mono
  59.     then cursor size 12-(ext_insert*5),13
  60.     else cursor size 6-(ext_insert*3),7
  61.  
  62. wait for keypressed
  63. ext_ks=keyscan:ext_kk=low ext_ks
  64.  
  65. if ext_kk=13 then goto endeim
  66. if ext_kk=27 then ext_esc=1:goto endeim
  67.  
  68. if ext_ks=18176 then ext_tx=0
  69. if ext_ks=20224 then ext_tx=last_place
  70. if (ext_ks=19200) and (ext_tx>0) then ext_tx--
  71. if (ext_ks=19712) and (ext_tx<(ext_max-1)) then ext_tx++
  72. if ext_ks=21248 then
  73.     {
  74.     ext_dl=ext_max-ext_tx-1
  75.     if ext_dl>0 then
  76.     {
  77.     pokeb eim+ext_max-1,' '
  78.     moveb ext_dl from eim+ext_tx+1 to eim+ext_tx
  79.     }
  80.     }
  81. if (ext_ks=29952) or (ext_ks=16384) then
  82.     {
  83.     fillb ext_max-ext_tx from eim+ext_tx with ' '
  84.     }
  85. if ext_ks=20992 then ext_insert=not ext_insert
  86. if ext_ks=16128 then ext_clear_line
  87. if ext_ks=3592 then
  88.     {
  89.     pokeb eim+ext_max-1,' '
  90.     moveb ext_max-ext_tx from eim+ext_tx to eim-1+ext_tx
  91.     if ext_tx then ext_tx--
  92.     goto loop
  93.     }
  94.  
  95. if not ext_kk then goto loop
  96. if ext_tx<(ext_max-1) then
  97.     {
  98.     if ext_insert then moveb ext_max-ext_tx from eim+ext_tx to eim+1+ext_tx
  99.     pokeb eim+ext_tx,ext_kk
  100.     ext_tx++
  101.     }
  102. goto loop
  103.  
  104. endeim:
  105. if ext_esc then 
  106.     {
  107.     moveb ext_max from store_eim to eim
  108.     return 0
  109.     }
  110. lp=last_place+1
  111. if peekb (eim+lp-1)<>' ' then lp++
  112. if eis then pokeb eim-1,lp-1
  113. pokeb eim+lp-1,ext_inpend
  114. return lp
  115. }
  116.  
  117. function ext_clean_input(eim)
  118.     {
  119.     ext_max=peekb eim
  120.     fillb ext_max from eim+2 with ' '
  121.     return ext_input(eim)
  122.     }
  123.  
  124. function ext_string(eim,ext_max)
  125.     {
  126.     ext_entry3:
  127.     eis=0
  128.     goto ext_entry2
  129.     }
  130.  
  131. function ext_clean_string(eim,ext_max)
  132.     {
  133.     fillb ext_max from eim with ' '
  134.     goto ext_entry3
  135.     }
  136.